/*
 * Copyright© 2003-2019 浙江汇信科技有限公司, All Rights Reserved.
 */
package com.icinfo.cloud.provider.punish.approval.service;

import com.icinfo.cloud.provider.punish.approval.dto.*;
import com.icinfo.cloud.provider.punish.approval.model.CaseApprovalWaitRecord;
import com.icinfo.cloud.provider.punish.approval.vo.*;
import com.icinfo.framework.common.web.Result;
import com.icinfo.framework.core.service.BaseService;

import java.util.List;
import java.util.Map;

/**
 * 描述: 案件文书待审批记录表 case_approval_wait_record 对应的Service接口.<br>
 *
 * @author framework generator
 * @date 2022年02月15日
 */
public interface ICaseApprovalWaitRecordService extends BaseService {

    /**
     * 待审批列表
     * @param auditQueryPageDto
     * @return
     */
    List<AuditInfoListVo> getWaitList(AuditQueryPageDto auditQueryPageDto);

    /**
     * 查询待审批页 每个颜色时效案件数量
     * @param auditQueryPageDto
     * @return
     */
    WaitPageEachColorNumVo getEachColorNum(AuditQueryPageDto auditQueryPageDto);

    /**
     * 审核同意操作
     * @param approvalAuditDto
     * @return
     */
    Map<String,Object> doAgreeAudit( ApprovalAgreeAuditDto approvalAuditDto);

    /**
     * 审核退回操作
     * @param approvalAuditDto
     * @return
     */
    Map<String,Object> doReturnAudit(ApprovalReturnlAuditDto approvalAuditDto);

    /**
     * 查询下个节点审批人员
     * @param dto
     * @return
     */
    List<NextAuditUserVo> getNextNodeUser(AuditNextUserQueryDto dto);

    /**
     * 通用文书（需要审批）提交生成待审批记录
     * @param caseId 案件id
     * @param  documentCatalogCode 文书目录编码
     * @param  userId 指定审批人userId 若为空： 默认取对应角色第一个
     * @param  opinion 发起人意见，可为空
     * @param  partyId 当事人id
     * @return
     */
    Map<String,Object> documentGeneralSubmit(String caseId, String documentCatalogCode, String userId, String opinion,String partyId,String caseAssistId,String isAutoApproval,String autoTime,String docId,String isEditApproval);

    /**
     * 通用文书（需要审批）提交生成待审批记录(裁执分离)
     * @param executeId 裁执分离id
     * @param  documentCatalogCode 文书目录编码
     * @param  userId 指定审批人userId 若为空： 默认取对应角色第一个
     * @param  opinion 发起人意见，可为空
     * @param  partyId 当事人id
     * @return
     */
    Map<String,Object> documentGeneralSubmitWithExecute(String executeId, String documentCatalogCode, String userId, String opinion,String partyId);


    /**
     * 查询待审批列表审批事项（文书种类）
     * @param
     * @return
     */
    List<AuditItemVo> getAuditItemList();

    /**
     * 【V1.3.0】描述：环节撤回时，待审批数据放入审批完成表中，并标识为撤回
     * @author tianrunjia
     * @date 2022-06-24
     * @return
     */
    void doRecallApprovalWaitRecordByCaseId(String caseId);

    void dealApprovalWaitRecord(CaseApprovalWaitRecord e);


    /**
     * 描述：获取待审批记录数
     *
     * @param caseId 案件id
     * @return int 待审批记录数
     * @author xiangyuyu
     * @date 2022-07-01 21:03
     */
    int getWaitToApprovalCount(String caseId);
    /**
     * 获取审批相关状态
     * @author liyafeng
     * @date 2022/8/9
      * @param approvalQueryDto
     * @return {@link Result< ApprovalInfoVo>}
     */
    ApprovalInfoVo getApprovalInfo(ApprovalQueryDto approvalQueryDto);

    /**
     * 描述: 查询待审批列表,增加类型区分
     *
     * @param auditQueryPageDto
     * @return Result
     * @author zhanghongqiang
     * @Date 2022/8/29
     */
    List getWaitAuditList(AuditQueryPageDto auditQueryPageDto);

    /**
     * 描述: 查询待审批页 每个颜色时效案件数量
     *
     * @param auditQueryPageDto
     * @return com.icinfo.framework.common.web.Result
     * @author zhanghongqiang
     * @Date 2022/8/30
     */
    WaitPageEachColorNumVo getApprovedColorNum(AuditQueryPageDto auditQueryPageDto);
    /**
     * 审核同意操作(裁执分离)
     * @param approvalAuditDto
     * @return
     */
    Map<String, Object> doAgreeAuditWithExecute(ApprovalAgreeAuditDto approvalAuditDto);
    /**
     * 审批退回(裁执分离)
     * @param: [approvalAuditDto]
     * @return: Map<Object>
     * @Author: wuzhihui
     * @Date: 2022/09/13
     */
    Map<String, Object> doReturnAuditWithExecute(ApprovalReturnlAuditDto approvalAuditDto);
    /**
     * 速结程序查询当前审批信息
     * @author liyafeng
     * @date 2022/12/11
      * @param caseId
     * @param documentCatalogCode
     * @return {@link FastCaseApprovalInfoVo}
     */
    FastCaseApprovalInfoVo getFastCaseApprovalInfo(String caseId, String documentCatalogCode);

    /**
     * 获取工作台统计数据
     * @param dto
     * @return
     */
    WorkbenchStatisticsJsonVo getWorkbenchStatistics(WorkbenchStatisticsDto dto);

    List<PersonalTaskVo> getPersonalTask(PersonalTaskDto personalTaskDto);
    /**
     *提交自动审批接口，该文书需要审批调用
     * @author liyafeng
     * @date 2022/12/13
      * @param caseId
     * @param documentCatalogCode
     * @param nextHandler
     * @param opinion
     * @param partyId
     * @param caseAssistId
     * @param isAutoApproval
     * @param autoTime
     * @return {@link Map< String, Object>}
     */
    Map<String, Object> documentGeneralSubmitAuto(String caseId, String documentCatalogCode, String nextHandler, String opinion, String partyId, String caseAssistId, String isAutoApproval, String autoTime);
    /**
     * 获取审批通过dto
     * @author liyafeng
     * @date 2022/12/14
      * @param dto
     * @return {@link ApprovalAgreeAuditDto}
     */
    ApprovalAgreeAuditDto getApprovalAgreeAuditDto(ApprovalGeneralSubmitDto dto);

    Map<String, Object> doAgreeAuditAuto(ApprovalAgreeAuditDto approvalAgreeAuditDto);
    /**
     * 审批是否展示公示详情 1 是 , 0 否
     * @author liyafeng
     * @date 2022/12/22
      * @param dto
     * @return {@link String}
     */
    String getApprovalIsShowPublicDetail(ApprovalIsShowPublicDetailDto dto);
    /**
     * 通用提交审批-new
     * @author liyafeng
     * @date 2022/12/30
      * @param dto
     * @return {@link Map< String, Object>}
     */
    Map<String, Object> documentGeneralSubmitNew(ApprovalGeneralSubmitDto dto);
    /**
     * 审批通过-new
     * @author liyafeng
     * @date 2023/1/4
      * @param approvalAuditDto
     * @return {@link Map< Object, Object>}
     */
    Map<String, Object> doAgreeAuditNew(ApprovalAgreeAuditDto approvalAuditDto);
    /**
     * 是否展示去设置 1是，0否
     * @author liyafeng
     * @date 2023/2/1
      * @param userId
     * @param orgCode
     * @return {@link String}
     */
    String getApprovalIsShowSetPerson(String userId, String orgCode);

    /**
     * 【V1.11.0】描述：修改文书（需要审批）提交生成待审批记录
     * @param caseId 案件id
     * @param  documentCatalogCode 文书目录编码
     * @param  userId 指定审批人userId 若为空： 默认取对应角色第一个
     * @param  opinion 发起人意见，可为空
     * @param  partyId 当事人id
     * @param  caseAssistId 子流程id
     * @param  documentId 文书id
     * @param  isEditApproval 是否修改文书审批
     * @return
     */
    Map<String,Object> modifyDocumentGeneralSubmit(String caseId, String documentCatalogCode, String userId, String opinion, String partyId, String caseAssistId, String documentId, String isEditApproval);

    /**
     * 【V1.11.0】描述：变更文书审批退回
     * @param approvalAuditDto
     * @return
     */
    Map<String, Object> doReturnAuditOfModifyDocument(ApprovalReturnlAuditDto approvalAuditDto);

    /**
     * 【V1.11.0】描述：变更文书审批通过
     *
     * @param approvalAuditDto
     * @return
     */
    Map<String, Object> doAgreeAuditOfModifyRecord(ApprovalAgreeAuditDto approvalAuditDto);
    /**
     * 合并提交审批接口，该文书需要审批调用（简案快办合并提交使用）
     * @author liyafeng
     * @date 2023/4/24
      * @param dto
     * @return {@link Map< String, Object>}
     */
    Map<String, Object> documentGeneralSubmitMergeAuto(ApprovalGeneralSubmitDto dto);
    /**
     * 获取审批通过dto(合并提交)
     * @author liyafeng
     * @date 2023/4/24
      * @param dto
     * @return {@link ApprovalAgreeAuditDto}
     */
    ApprovalAgreeAuditDto getApprovalAgreeAuditMergeDto(ApprovalGeneralSubmitDto dto);
    /**
     * 获取审批通过dto(合并提交)
     * @author liyafeng
     * @date 2023/4/25
      * @param approvalAgreeAuditDto
     * @return {@link Map< String, Object>}
     */

    Map<String, Object> doAgreeAuditMergeAuto(ApprovalAgreeAuditDto approvalAgreeAuditDto);
    /**
     * 审批通过（合并审批）
     * @author liyafeng
     * @date 2023/4/27
      * @param approvalAuditDto
     * @return {@link Map< Object, Object>}
     */
    Map<String, Object> doAgreeAuditMerge(ApprovalAgreeAuditDto approvalAuditDto);
    /**
     *合并审批审批退回
     * @author liyafeng
     * @date 2023/5/6
      * @param approvalAuditDto
     * @return {@link Map< Object, Object>}
     */
    Map<String, Object> doReturnAuditMerge(ApprovalReturnlAuditDto approvalAuditDto);

    /**
     * 描述：查询下一环节审批人
     *
     * @param caseId
     * @param documentCatalogCode
     * @return boolean
     * @author shishengyao
     * @date 2023/08/24
     */
    NextAuditUserVo getNextAutoAuditUserVo(String caseId,String documentCatalogCode);
}
